Xamarin.Android 基本プロジェクトからみるAndroid Studio(Java)との比較
1 はじめに
前記事、「Xamarin.Android テンプレート(Blank App)」で紹介したとおり、Xamarin.Androidはプラットフォームライブラリを「薄くラッパー」したものになっています。 今回は、殆どの場合、最初の入り口となるであろうシンプルなプロジェクトで、VisualStudio(Xamarin/C#)とAndroid Studio(Java)の比較をしてみました。
2 プロジェクトの新規作成
(1)Android Studio
「Quick Start」の「Start new Android Studio Project」から新しいプロジェクトを作成し、「Add an activuty to Moble」で「Blank Activity」を選択すると、レイアウトファイル(xml)を使用した単一ビューのプロジェクトが作成されます。
プロジェクトのファイルツリーを見ると、主要な3種類のファイルが確認できます。
(2)Xamarin
新規作成から「Blank App(Android)」を選択すると、上記と同じくレイアウトファイル(axml)を使用した単一ビューのプロジェクトが作成されます。
ソリューションエクスプローラーで確認すると、主要なファイルは、Android Studioで見たものと殆ど同じになっています。
※名前は、C#らしく「アッパーキャメルケース」になっています。
それぞれのIDEのファイルツリーにおいて、主要ファイルに赤字で①〜③のナンバーリングをしましたが、以降、この3つのファイルについて比較してみることにします。
3 AndroidManifest.xml(①)
(1)Android Studio
AndroidManifest.xmlには、アプリケーションの各種情報が記述されており、apprication-activityには、最初に起動するActivityとして「MainActivity」が設定されています。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sin.app1" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
(2)Xamarin
XamarinのAndroidManifest.xmlでは、Activityについては何も記述されていません。 (起動Activityの指定は、次のMainActivity.csに定義されています。)
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="App1.App1" android:versionCode="1" android:versionName="1.0"> <uses-sdk /> <application android:label="App1" android:icon="@drawable/Icon"> </application> </manifest>
4 MainActivity(②)
(1)Android Studio
Activityクラスです。onCreate()が起動時に実行されるメソッドで、その中で、setContentView()を使用して、レイアウトとして「R.layout.activity_main」を使用するように指定しています。
MainActivity.java
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //・・・略・・・ }
(2)Xamarin
先のAndroidManifest.xmlで設定されていなかった、最初に起動するActivityは、ここの「Activity」属性で指定されています。「MainLauncher = true」が、その設定です。 なお、Xamarinでも、OnCreate()の中で、SetContentView()を使用して、レイアウトとして「Resource.Layout.Main」を使用するように指定しています。
MainActivity.cs
[Activity(Label = "App1", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { int count = 1; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); }; } }
5 activity_main.xml/Main.axml(③) レイアウトファイル
(1)Android Studio
(2)Xamarin
VisualStudioからも、GUIによる操作は可能です。 Xamarinでは、レイアウトファイルがaxmlになっていますが、中身はAndroidStudioのxmlとまったく同じ構造です。 (まったく同じより、XAMLの方が嬉しかったのですが・・・)
6 まとめ
今回は、シンプルなプロジェクトを作成した際に生成されるファイルについて、2種類のIDEで比較してみました。 こちらも、iOSと同様にある種の法則を見つければ、簡単に変換可能だと思います。
Xamarin.Andoridを始めるにあたっても、日本語のドキュメントは殆ど無いのですが、Androidの入門書が十分活用できたりします。
7 参考リンク
Xamarin Developers (Android Getting Started Hello, Android)
初めての Xamarin.Android アプリケーション開発 - 入門ガイド